home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
CRS
/
crs55.d81
/
asc2pet.c
next >
Wrap
Text File
|
2009-10-10
|
4KB
|
150 lines
/*
*
* A2P.C
*
* ├ONVERT AN ASCII TEXT FILE TO PETSCII.
* ╥EAD AS MUCH OF THE STANDARD INPUT INTO A MEMORY BUFFER,
* THEN OUTPUT IT WITH TRANSLATION TO THE STANDARD OUTPUT.
* ╥EPEAT UNTIL STANDARD INPUT GIVES AN ┼╧╞.
* ├URRENTLY SET UP TO CONVERT TAB TO TWO SPACES,
* IGNORE LINE FEEDS, CONVERT BACKSPACE (CODE 8) AND DELETE
* (CODE 127) TO PETSCII DELETE (CODE 20).
* ┴LSO, TRANSLATE ├ CHARACTERS TO THOSE REQUIRED BY ├╨OWER├.
*
* ┴UTHOR: ─AVID ╬ETO
* ─ATE : ─ECEMBER 8, 1988
*
*/
#INCLUDE "STDIO.H"
#DEFINE ╬╒╠ "\000" /* REMEMBER THESE CODES ARE IN OCTAL */
#DEFINE ╙╧╚ "\001"
#DEFINE ╙╘╪ "\002"
#DEFINE ┼╘╪ "\003"
#DEFINE ┼╧╘ "\004"
#DEFINE ┼╬╤ "\005"
#DEFINE ┴├╦ "\006"
#DEFINE ┬┼╠ "\007"
#DEFINE ┬╙ "\024" /* CHANGE BACKSPACE TO DELETE */
#DEFINE ╘┴┬ " " /* CHANGE TABS TO TWO SPACES */
#DEFINE ╠╞ "\000" /* IGNORE LINEFEEDS */
#DEFINE ╓╘ "\013"
#DEFINE ╞╞ "\014"
#DEFINE ├╥ "\015"
#DEFINE ╙╧ "\016"
#DEFINE ╙╔ "\017"
#DEFINE ─╠┼ "\020"
#DEFINE ─├1 "\021"
#DEFINE ─├2 "\022"
#DEFINE ─├3 "\023"
#DEFINE ─├4 "\024"
#DEFINE ╬┴╦ "\025"
#DEFINE ╙┘╬ "\026"
#DEFINE ┼╘┬ "\027"
#DEFINE ├┴╬ "\030"
#DEFINE ┼═ "\031"
#DEFINE ╙╒┬ "\000" /* IGNORE CTRL-Z */
#DEFINE ┼╙├ "\033"
#DEFINE ╞╙ "\034"
#DEFINE ╟╙ "\035"
#DEFINE ╥╙ "\036"
#DEFINE ╒╙ "\037"
#DEFINE ─┼╠ "\024"
STATIC CHAR *A2P [] =
█ ╬╒╠,╙╧╚,╙╘╪,┼╘╪,┼╧╘,┼╬╤,┴├╦,┬┼╠,
/* 0X08 */ ┬╙ ,╘┴┬,╠╞ ,╓╘ ,╞╞ ,├╥ ,╙╧ ,╙╔ ,
/* 0X10 */ ─╠┼,─├1,─├2,─├3,─├4,╬┴╦,╙┘╬,┼╘┬,
/* 0X18 */ ├┴╬,┼═ ,╙╒┬,┼╙├,╞╙ ,╟╙ ,╥╙ ,╒╙ ,
/* 0X20 */ " ","!","\"","#","$","%","&","'",
/* 0X28 */ "(",")","*","+",",","-",".","/",
/* 0X30 */ "0","1","2","3","4","5","6","7",
/* 0X38 */ "8","9",":",";","<","=",">","?",
/* 0X40 */ "@","┴","┬","├","─","┼","╞","╟",
/* 0X48 */ "╚","╔","╩","╦","╠","═","╬","╧",
/* 0X50 */ "╨","╤","╥","╙","╘","╒","╓","╫",
/* 0X58 */ "╪","┘","┌","[","\\","]","^","ñ",
/* 0X60 */ "'","A","B","C","D","E","F","G",
/* 0X68 */ "H","I","J","K","L","M","N","O",
/* 0X70 */ "P","Q","R","S","T","U","V","W",
/* 0X78 */ "X","Y","Z","█","▀","▌","»",─┼╠,
/* 0X80 */ "C","U","E","A","A","A","A","C", /* ACCENTED CHARS */
/* 0X88 */ "E","E","E","I","I","I","┴","┴",
/* 0X90 */ "┼","AE","┴┼","O","O","O","U","U",
/* 0X98 */ "Y","╧","╒","C","╠","┘","╥","F",
/* 0XA0 */ "A","I","O","U","N","╬","","",
/* 0XA8 */ "?","░","«","1/2","1/4","▀","<<",">>",
/* 0XB0 */ "ª","ª","ª","▌","│","│","│","«", /* 0XB3 IS A VERTICAL LINE */
/* 0XB8 */ "«","│","▌","«","╜","╜","╜","«",
/* 0XC0 */ "¡","▒","▓","½","└","█","½","½",
/* 0XC8 */ "¡","░","▒","▓","½","└","█","▒",
/* 0XD0 */ "▒","▓","▓","¡","¡","░","░","█",
/* 0XD8 */ "█","╜","░","\022 \222","ó","í","\022í\222","\022ó\222",
/* 0XE0 */ "ALPHA","BETA","╟AMMA","╨I","╙IGMA","SIGMA","MU","GAMMA",
/* 0XE8 */ "╨HI","╘HETA","╧MEGA","DELTA","PHI","PHI","EPSILON","INTERSECT",
/* 0XF0 */ "IS EQUIVALENT TO","+/-",">=","<=","","","/","",
/* 0XF8 */ "","","","","","","╝",""
▌;
#DEFINE ATOP(C) ( A2P[ (C) & 255 ] )
/* TRANSLATE FROM TRUE ┴SCII ╘╧ ╨ETSCII */
CHAR *MALLOC();
TYPEDEF INT VOID;
MAIN()
█
INT CH; /* INPUT CHARACTER */
AUTO CHAR *STARTMEM, *ENDMEM; /* START AND END OF TEXT SPACE */
CHAR *ENDTEXT; /* POINT TO ADDRESS AFTER LAST CHAR */
INT INPUT; /* INPUT STATE ┼╧╞ OR NOT ┼╧╞ */
CHAR *P;
MOSTñALLOC( &STARTMEM, &ENDMEM );
FOR ( INPUT = ┼╧╞+1; INPUT != ┼╧╞ ;)
█
/* GET NEXT CHUNK OF INPUT FILE INTO MEMORY */
FOR ( ENDTEXT = STARTMEM ; (CH=GETCHAR())!=┼╧╞ && ENDTEXT < ENDMEM; )
*ENDTEXT++ = CH;
INPUT = CH;
/* OUTPUT WITH CONVERSION */
FOR ( P = STARTMEM; P < ENDTEXT ; P++ )
FPUTS( ATOP(*P), STDOUT );
▌
QUIT(STARTMEM);
▌
/* ALLOCATE A LARGE CHUNK OF MEMORY */
/* (A MULTIPLE OF 254 BYTES TO MATCH DISK BLOCK SIZE) */
VOID MOSTñALLOC( FIRSTBYTE, LASTBYTE )
CHAR **FIRSTBYTE, **LASTBYTE;
█
UNSIGNED SIZE;
CHAR *P;
FOR( SIZE = 185*254; (P = MALLOC(SIZE))==0; SIZE -= 0X3F8 ) /* 0X3F8=4*254 */
;
FREE(P); P = MALLOC( SIZE -= 0X3F8 ); /* LEAVE AN EXTRA 1K */
*FIRSTBYTE = P;
*LASTBYTE = ((UNSIGNED) P) + SIZE-1; /* IMPLICITLY CAST TO (CHAR *) */
HIGHMEM(P);
▌
VOID QUIT(STARTMEM)
CHAR *STARTMEM;
█
HIGHMEM( 0XD000 );
FREE( STARTMEM );
▌